package com.tfjybj.itoo.exam.provider.dao;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.tfjybj.itoo.exam.entity.ExamRoomEntity;
import com.tfjybj.itoo.exam.entity.ExamineeEntity;
import com.tfjybj.itoo.exam.model.*;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;

import java.util.Date;
import java.util.List;

/**
 * ExamineeDao接口
 * examinee表
 *
 * @author 任晓帅
 * @version 2.0.0
 * @since 2.0.0 2018-11-15 19:40:28
 */
@Repository("examineeDao")
public interface ExamineeDao extends BaseMapper<ExamineeEntity> {

    //region 模板生成：模糊查询

    /**
     * 根据学生姓名模糊查询examinee
     *
     * @param studentName 学生姓名
     * @return 模糊查询的examinee集合
     * @author 任晓帅
     * @since 2.0.0 2018-11-15 19:40:28
     */
    List<ExamineeEntity> queryLikeStudentName(@Param("studentName") String studentName);

    //endregion

    /* **********************************以下为非模板生成的内容********************************* */


    /**
     * 根据学生姓名模糊查询考生信息
     *
     * @param studentName
     * @return 班级本场考试所有成绩
     * @authror 谢妞
     * @since 2018年12月14日19:23:16
     */
    List<ExaminationModel> queryExamineLikeName(@Param("studentName") String studentName, @Param("classId") String classId, @Param("examId") String examId);

    /**
     * 根据学生姓名模糊查询考生信息未内连接studentScore表
     *
     * @param stduentName
     * @param classId
     * @return 学生信息
     * @authror 谢妞
     * @since 2018年12月22日10:21:10
     */
    List<ExaminationModel> queryExamineLikeNameNoScore(@Param("classId") String classId, @Param("studentName") String stduentName, @Param("examId") String examId);

    /**
     * 根据考试班级ID和考试ID分页查询考生
     *
     * @param classId
     * @param examId
     * @author 谢妞
     * @since 2018-11-24
     */
    List<ExaminationModel> queryExamineeByClassIdExamId(@Param("classId") String classId, @Param("examId") String examId);

    /**
     * 根据考试班级ID和考试ID查询所有的考生
     *
     * @param classId
     * @param examId
     * @author 谢妞
     * @since 2018-11-24
     */
    List<ExaminationModel> queryExamineeByClassIdExamIdNoScore(@Param("classId") String classId, @Param("examId") String examId);

    /**
     * 根据考试id,班级id查询考生表中的所有已经有成绩的考生
     *
     * @param classId
     * @param examId
     * @author 谢妞
     * @since 2018年12月26日11:34:46
     */
    List<ExaminationModel> queryClassScore(@Param("classId") String classId, @Param("examId") String examId);

    /**
     * 查询本场考试下,本班学生中所有包含studentName的学生信息
     *
     * @param classId     班级Id
     * @param studentName 学生信息
     * @author 谢妞
     * @since 2018年12月22日20:38:22
     */
    List<ExaminationModel> queryExamineeByClassIdExamIdLikeName(@Param("classId") String classId, @Param("studentName") String studentName);


    /**
     * 根据班级id和考试id批量查询班级所有学生成绩
     *
     * @param exportList
     * @return 班级本场考试所有成绩
     * @authror 谢妞
     * @since 2018年12月14日19:23:16
     */
    List<ExaminationModel> queryExamineeInfo(@Param("exportList") List<ExaminationModel> exportList);


    /**
     * 用于批量导出的查询班级所有考生
     *
     * @param exportList
     * @return 班级的所有考生
     * @authror 谢妞
     * @since 2018年12月14日19:23:16
     */
    List<ExaminationModel> queryExamnieByClass(@Param("exportList") List<ExaminationModel> exportList);


    /**
     * 根据考试ID和考场ID查询考场下所有学生
     *
     * @param examId,examRoomId
     * @return ExamineeReachClassModel
     * @author 任晓帅
     * @since 2.0.0      2019年5月21日15:20:45
     */
    List<ExamineeReachClassModel> queryExamStudent(@Param("examId") String examId, @Param("examRoomId") String examRoomId);

    /**
     * 查询当前考场下所有缺考学生
     *
     * @param examId examRoomId
     * @return ExamineeReachClassModel
     * @author 王雪芬 任晓帅
     * @since 2.0.0        2018-11-19 12:16:03  2019年5月21日17:14:04
     */
    List<ExamineeModel> queryExamStudentNologin(@Param("examId") String examId, @Param("examRoomId") String examRoomId);

    /**
     * @param examId String
     * @return 根据考试id查出本场考试所有考生
     * @author maying
     * @since 2018年11月17日11:23:36
     */
    List<ExamineeModel> selAllExaminee(@Param("examId") String examId);

    /**
     * @param examId String
     * @return 根据考试id删除本场考试所有考生
     * @author maying
     * @since 2018年11月18日10:12:23
     */
    int delExamineeArray(@Param("examId") String examId);

    /**
     * 根据考试id查询查询课程信息
     *
     * @param courseId
     * @return list
     * @author maying
     * @since 2018年11月27日21:31:34
     */
    List<ClassModel> selExamClass(@Param("examId") String courseId);

    /**
     * 查询安排考生-用于简要考试
     *
     * @param studentId 学号
     * @return 学生信息
     * @author 王雪芬
     * @since 2018-11-23 15:51:29
     */
    List<ExamineeEntity> queryExamStudentExaminee(@Param("studentId") String studentId, @Param("exameeId") String exameeId);

    ExamineeEntity queryExamExamineeInfo(@Param("examineeId") String examineeId);

    /**
     * 根据考试低查询考试下面所有的考生
     *
     * @param examinationId 考试id
     * @return 考生集合
     * @author 马莹
     * @since 2018-12-29 21:25:34
     */
    List<ExamineeModel> queryNotExamStudent(@Param("examinationId") String examinationId);

    /**
     * 根据学号或姓名查询考生-模糊查询(考试信息管理)
     *
     * @author maying
     * @since 2018-12-11 10:14:16
     */
    List<ExamineeModel> fuzzyQuery(@Param("examineeName") String examineeName, @Param("examinationId") String examinationId);

    /**
     * 根据班级集合查询这个班级集合下面所有的学生
     *
     * @param classList   班级集合
     * @param examationId 考试id
     * @param operatorId  操作人id
     * @param fuzzyValue  模糊查询条件
     * @return 学生集合以班级为单位
     * @since 2018-12-22 11:08:12
     * author 马莹
     */
    List<ExamineeModel> selectStudentList(@Param("classList") List<String> classList, @Param("examationId") String examationId, @Param("operatorId") String operatorId, @Param("fuzzyValue") String fuzzyValue);

    List<ExamineeEntity> queryExamStudentEndTime(@Param("studentId") String studentId);

    /**
     * 根据考试id更新考试时长
     *
     * @param examId       考试id
     * @param examDuration 考试时长
     * @author 马莹
     * @since 2018-12-24 20:26:26
     */
    boolean updateExamineeInfomation(@Param("examId") String examId, @Param("examDuration") Integer examDuration);

    List<ExaminOnlineModel> queryExamExaminee(@Param("studentId") String studentId);


    /**
     * 根据学生id查询考生信息
     *
     * @param beginTime
     * @param overTime
     * @param studentId 学生id  @return 考试集合
     * @author 马莹
     * @since 2018-12-28 17:13:33
     */
    List<ExaminationModel> selectExaminee(@Param("beginTime") String beginTime, @Param("overTime") String overTime, @Param("studentId") String studentId);

    /**
     * 查询考场总人数
     *
     * @param examRoomId
     * @return
     * @author 于云秀
     * @since 2018年12月29日10:33:40
     */
    List<ExamineeEntity> selExamRoomStudentCount(@Param("examRoomId") String examRoomId, @Param("examId") String examId);

    /**
     * 通过考试id查询获取考场的个数
     *
     * @param examId 考试id
     * @return 考场的集合
     * @author 马莹
     * @since 2019-1-3 20:24:13
     */
    List<ExamRoomEntity> selectExamineeInExamRoom(@Param("examId") String examId);

    /**
     * 根据考试id查询考试的考生人数
     *
     * @param examId 考试id
     * @return 考生集合
     * @author 马莹
     * @since 2019-1-3 20:41:03
     */
    List<ExamineeModel> selectCountExaminee(@Param("examId") String examId);

    List<ExamineeEntity> examOnlineExamineeState();

    int updateExamineeStatus(@Param("examineeEntityList") List<ExamineeEntity> examineeEntityList);

    /**
     * 根据考试id和考场id查询考生信息
     *
     * @param examId     考试id
     * @param examRoomId 考场id
     * @return 考生集合
     * @author 马莹
     * @since 2019-1-7 11:22:13
     */
    List<ExamExamineeListModel> selectExamineeInfomation(@Param("examId") String examId, @Param("examRoomId") String examRoomId);


    List<ExaminationModel> ifSummaryScore(@Param("examId") String examId, @Param("classId") String classId);


    /**
     * 根据教师id校验人数
     *
     * @param operator
     * @author 谢妞
     * @since 2019年1月20日08:30:16
     */
    List<ExaminationModel> checkExamine(@Param("operator") String operator);


    /**
     * 根据教师id查看缺考信息
     *
     * @param operator
     * @author 谢妞
     * @since 2019年1月22日16:07:19
     */
    List<ExaminationModel> checkLack(@Param("operator") String operator);


    /**
     * 根据教师id查看没有成绩的学生
     *
     * @param operator
     * @author 谢妞
     * @since 2019年1月22日16:38:03
     */
    List<ExaminationModel> checkNoScore(@Param("operator") String operator);

    /**
     * 根据教师id查看在成绩表中却不在答题记录表的数据
     *
     * @param operator
     * @author 谢妞
     * @since 2019年1月22日16:38:03
     */
    List<ExaminationModel> checkNoPaperRecord(@Param("operator") String operator);

    /**
     * 修改考生状态
     *
     * @param examID 考试id
     * @author 魏恩君
     * @since 2019年1月26日20:33:18
     */
    int updateExamState(@Param("examID") String examID);

    /**
     * 查询已发布班级
     *
     * @param templateId 模板ID
     * @author 郭满亮
     * @since 2019年1月30日11:42:24
     */
    List<SelectTeacherTeachClassModel> getTeacherClass(String templateId);


    /**
     * 根据考生id和班级id查询各章节得分率60%以上人数
     *
     * @param classId
     * @param examId
     * @author 孙博雅
     * @sinces 2019年3月3日19:34:14
     */
    List<ExaminationModel> querychapternumbe(@Param("classId") String classId, @Param("examId") String examId, @Param("examineeId") String examineeId);


    /**
     * 根据班级id和考试id查询考生id
     *
     * @param classId
     * @param examId
     * @author 孙博雅
     * @sinces 2019年3月3日19:34:14
     */
    List<ExaminationModel> queryStudent(@Param("classId") String classId, @Param("examId") String examId);

    /**
     * 根据考试开始时间查询这个时间点有考试的考生
     *
     * @param examStartTime 考试开始时间
     * @return 考生集合
     * @author 马莹
     * @since 2019-3-28 19:50:18
     */
    List<ExamineeModel> queryExaminee(@Param("examStartTime") String examStartTime);

    List<ExamineeModel> queryChapterNumbe(@Param("classId") String classId, @Param("examinationId") String examinationId);

    /**
     * 根据考试的开始时间和结束时间查询考生
     *
     * @param startTime 考试开始时间
     * @param endTime   考试结束时间
     * @return 符合条件的考生集合
     * @author 马莹
     * @since 2019-5-5 21:45:25
     */
    List<ExamineeModel> queryMeetConditionExaminnee(@Param("startTime") Date startTime, @Param("endTime") Date endTime);

    /**
     * 根据考生id和班级id查询学生章节具体分数
     *
     * @param classId
     * @param examId
     * @author a孙博雅
     * @sinces 2019年3月16日20:43:36
     */
    List<ExaminationModel> querychapterscore(@Param("classId") String classId, @Param("examId") String examId, @Param("examineeId") String examineeId);

    ExaminationModel selectTotalScore(@Param("classId") String classId, @Param("examId") String examId, @Param("examineeId") String examineeId);

    /**
     * 根据考试id和学生id查询是否存在本场考试
     *
     * @param stuId  学生id
     * @param examId 考试id
     * @return 考生集合
     * @author 马莹
     * @since 2019-6-29 11:24:04
     */
    Integer queryStuInExam(@Param("stuId") String stuId, @Param("examId") String examId);

    /**
     * 根据学生学号查询实习系统考试（小练）
     * @author 谷海涛
     * @since 2019年7月7日21:07:35
     * @param studentCode
     * @return
     */

    List<ExamineeModel> selectLittlePractice(@Param("studentCode") String studentCode);
}
